﻿using System;
using System.Collections.Generic;
using System.Text;

namespace ycdlib
{
	/// <summary>
	/// YCNodeの基本
	/// </summary>
	abstract internal class YCNodeBase : YCNode
	{
		#region フィールド

		private string name;
		private string id;
		private YCNode parent;

		#endregion


		#region プロパティ

		/// <summary>
		/// 名前を取得、または設定できる
		/// </summary>
		public string Name
		{
			get { return name; }
			set { name = value; }
		}


		/// <summary>
		/// IDを取得、または設定できる
		/// </summary>
		public string ID
		{
			get { return id; }
			set { id = value; }
		}


		/// <summary>
		/// 親となるYCNodeオブジェクトを取得できる
		/// </summary>
		public YCNode Parent
		{
			get { return parent; }
			internal set { parent = value; }
		}
		#endregion

		#region YCNode メンバ

		public abstract string YCType
		{
			get; internal set;
		}

		/// <summary>
		/// 値を取得、または設定できる
		/// </summary>
		public abstract object Value { get; set; }


		public abstract int ChildCount { get; }

		public abstract void Write ( System.IO.Stream s, int p );

		public abstract void AddChild ( YCNode newNode );

		#endregion


		public YCNodeBase ( YCNode p )
		{
			parent = p;
		}
	}
}
